package producedepartment.impl;

import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import lombok.Getter;
import lombok.Setter;

import org.apache.log4j.Logger;

import producedepartment.bean.ProduceHistory;
import producedepartment.interfaces.IProduceDepartment;
import product.impl.Product;
import product.utils.ProductUtils;
import saledepartment.impl.Department;

/**
 * Komponent odpowiedzialny za dzial produkcji przedsiebiorstwa
 * 
 * @author Przemek Pioro
 * 
 */
@Resource
public class ProduceDepartment extends Department implements IProduceDepartment {
	static final Logger log = Logger.getLogger(ProduceDepartment.class);
	@Setter
	private ProduceHistory produceHistory;
	@Getter
	private int requierdProductCount = 0;

	@Override
	/**
	 * Pobiera produkt z magazunu
	 */
	public Product getProduktFromMagazin(Product p) {
		for (Product produkt : magazin.getMagazinState()) {
			if (ProductUtils.equals(produkt, p)){
				produceHistory.addProdukt(produkt, new Date());
				magazin.setProductCount(p);
				return p;
			}
		}
		
		return null;
	}
	
	public int getProductCount(Product p){
		return magazin.getProductCount(p);
	}

	@Override
	/**
	 * Produkuje produkt
	 */
	public Product produce(Product product) {
		log.debug("Produkuje produkt o parametrach nazwa: " + product.getName() + " ilosc: "+ product.getCount());
		
		produceHistory.addProdukt(product, new Date());
		magazin.addProduct(product);
		return product;

	}
	/**
	 * Zwraca historie produkcji
	 */
	@Override
	public ProduceHistory getProduceHistory() {
		return produceHistory;
	}
	/**
	 * Pobiera liste produktow z magazunu
	 * @return
	 */
	public List<Product> getProductList() {
		return magazin.getMagazinState();

	}
	/**
	 * Sprawdza czy produkt jest dostepny w magazynie
	 * @param p
	 * @return
	 */
	public boolean isProductAvaible(Product p) {
		return magazin.isProductAvaible(p);
		
	}
	/**
	 * Zwieksza liczbe potrzebnych produktow 
	 * w magazynie
	 * @param count
	 */
	public void addBuyProductCount(int count) {
		this.requierdProductCount+=count;
	}

}
